package com.linwen.javase.desgin_pattern.create.clone.copy;

import java.io.*;

/**
 * @ClassName CloneUtils
 * @Description
 * @Author lin
 * @Date 2022/3/17 下午9:25
 * @Version V1.0
 */
public class CloneUtils<T> {

    public static <T extends Serializable>T clone(T obj){
        T cloneObj = null;
        try {
            //写入字节流
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            ObjectOutputStream obs = new  ObjectOutputStream(out);
            obs.writeObject(obj);
            obs.close();
            //分配内存，写入原始对象，生成新对象
            ByteArrayInputStream ios = new  ByteArrayInputStream(out.toByteArray());
            ObjectInputStream ois = new ObjectInputStream(ios);
            //返回生成的新对象
            cloneObj = (T) ois.readObject();
            ois.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return cloneObj;
    }
}
